/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.output;

import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IClientEntreprise;
import fr.generali.accueilclient.client.om.IPersonneMorale;
import fr.generali.accueilclient.client.om.NaturePersonne;
import fr.generali.accueilclient.client.om.impl.PersonneMorale;
import fr.generali.refservcommuns.rce.servperscom.pty.detailspersonnes.DtoProcedureJudiciaire;
import fr.generali.refservcommuns.rce.servperscom.pty.detailspersonnes.DtoSuiviAnnuelEntreprise;
import fr.generali.refservcommuns.rce.servperscom.pty.personnes.DtoPersonneMorale;

/**
 * Transforme un {@link DtoPersonneMorale} en {@link IPersonneMorale}
 * 
 * @author selrhazala
 */
@Component("dtoPersonneMorale2PersonneMoraleConverter")
public class DtoPersonneMorale2PersonneMoraleConverter implements Converter<DtoPersonneMorale, IPersonneMorale> {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(DtoPersonneMorale2PersonneMoraleConverter.class);
    
    /**
     * {@inheritDoc}
     */
    public IPersonneMorale convert(DtoPersonneMorale input) {
        LOGGER.info("assemble");
        IPersonneMorale personneMorale = new PersonneMorale();
        
        personneMorale.setRaisonSociale(input.getNomCommercial());
//        personneMorale.setRaisonSociale(input.getRaisonSociale());
        personneMorale.setCodeNaf(input.getCodeNAF());
        personneMorale.setCompteEspaceClient(input.getCompteEspaceClient());
        personneMorale.setIdClientFue(input.getDenominationFUE());
        personneMorale.setFormeJuridique(input.getFormeJuridique());
//        personneMorale.setSigle(input.getNomCommercial());
        personneMorale.setSigle(input.getSigle());
        if (input.isVip() != null) {
            personneMorale.setClientVIP(input.isVip());
        }
        personneMorale.setOrigineClient(input.getRaisonConnaissanceTiers());
        
        if (input.getMoisClotureComptable() != null) {
            if (input.getMoisClotureComptable().toString().length() == 1) {
                personneMorale.setMoisClotureComptable("0" + input.getMoisClotureComptable());
            } else {
                personneMorale.setMoisClotureComptable(input.getMoisClotureComptable().toString());
            }
        }
        
        if (input.getEntreprise() != null
                        && NaturePersonne.ENTREPRISE.equals(personneMorale.getNaturePersonne())) {
            IClientEntreprise clientEntreprise = IClientEntreprise.class.cast(personneMorale);
            clientEntreprise.setSiren(input.getEntreprise().getCodeNIC());
            clientEntreprise.setCodeNic(input.getEntreprise().getCodeNIC());
            personneMorale = IPersonneMorale.class.cast(clientEntreprise);
        }
        
        if (input.getRelationClient() != null) {
            personneMorale.setTitreCourrier(input.getRelationClient().getTitreCourrier());
        }
        
        if (CollectionUtils.isNotEmpty(input.getProcedureJudiciaire())) {
            DtoProcedureJudiciaire dtoProcedureJudiciaire = input.getProcedureJudiciaire().get(0);
            personneMorale.setTypeProcedure(dtoProcedureJudiciaire.getTypeProcedureJudiciaire());
        }
        
        if (CollectionUtils.isNotEmpty(input.getSuiviAnnuelEntreprise())) {
            DtoSuiviAnnuelEntreprise dtoSuiviAnnuelEntreprise = input.getSuiviAnnuelEntreprise().get(0);
            personneMorale.setAnneeExercice((dtoSuiviAnnuelEntreprise.getExercice() == null) 
                            ? null : dtoSuiviAnnuelEntreprise.getExercice().toString());
        }
        
        if (input.getSecteurActivite() != null) {
            personneMorale.setSecteurActivite(input.getSecteurActivite().getCode());
        }
        
//        // Indicateur client actif (true) ou désactivé (false)
//        if (StringUtils.isEmpty(input.getEtat()) 
//                        || input.getEtat().equals("0")) {
//            personneMorale.setActif(true);
//        } else {
//            personneMorale.setActif(false);
//        }
        
        return personneMorale;
    }
}
